Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] gnuradio: update to 3.9.5.0.
@ 2022-01-14 16:25 unspecd
  2022-01-14 20:34 ` unspecd
                   ` (64 more replies)
  0 siblings, 65 replies; 66+ messages in thread
From: unspecd @ 2022-01-14 16:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1165 bytes --]

There is a new pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.9.5.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 9655 bytes --]

From 96af4fdbba9fbb0004ecb259001c4612ff8e39ea Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH] gnuradio: update to 3.9.5.0.

---
 common/shlibs                                 | 36 ++++++++++---------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ----------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 ---------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ----------------
 srcpkgs/gnuradio/template                     | 34 +++++++++++-------
 5 files changed, 42 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index c4b2c348f6f3..2da9f96786ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,26 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-pmt.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-blocks.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-audio.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-fec.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-fft.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-filter.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-analog.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-digital.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-dtv.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-channels.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-trellis.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-video-sdl.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-vocoder.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-wavelet.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-uhd.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-network.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-soapy.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-qtgui.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-zeromq.so.3.9.5 gnuradio-3.9.5.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..18ecf1575160 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,38 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.9.5.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+# -DGR_PYTHON_DIR=/${py3_sitelib}
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen swig python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libsndfile-devel libsodium-devel libusb-devel
+ log4cpp-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 qwt-devel
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=066c88fcf05046593e534416a3526ee433c3b90a7faa40fca914add23989ef3e
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.9.5.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
@ 2022-01-14 20:34 ` unspecd
  2022-01-14 20:36 ` unspecd
                   ` (63 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-14 20:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 323 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013455730

Comment:
GrSwig is deprecated in 3.9, so gnuradio-osmosdr cannot be revbumped. Here are similar issues:
- gnuradio/gr-bokehgui/issues/34
- https://github.com/troycurtisjr/gr-pager/issues/8

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.9.5.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
  2022-01-14 20:34 ` unspecd
@ 2022-01-14 20:36 ` unspecd
  2022-01-15  5:04 ` [PR PATCH] [Updated] " unspecd
                   ` (62 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-14 20:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 375 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013455730

Comment:
GrSwig is deprecated in 3.9, so gnuradio-osmosdr cannot be revbumped. Here are similar issues:
- gnuradio/gr-bokehgui/issues/34
- https://github.com/ptrkrysik/gr-gsm/issues/582
- https://github.com/troycurtisjr/gr-pager/issues/8


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.9.5.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
  2022-01-14 20:34 ` unspecd
  2022-01-14 20:36 ` unspecd
@ 2022-01-15  5:04 ` unspecd
  2022-01-15  6:34 ` [PR PATCH] [Updated] gnuradio: update to 3.10.0.0 unspecd
                   ` (61 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  5:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1180 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.9.5.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 12759 bytes --]

From 469524b1b9b0598d4d78058b608449959bbcb350 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/2] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index c4b2c348f6f3..96ba87e335af 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 3d135534d47263eb12c4ed80f93985ad228dfc91 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/2] gnuradio: update to 3.10.0.0.

---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 34 +++++++++++------
 5 files changed, 44 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index 96ba87e335af..52f9f51df89a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..8fa56e944b7e 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,38 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+# -DGR_PYTHON_DIR=/${py3_sitelib}
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen swig python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel libsodium-devel
+ libusb-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 spdlog qwt-devel
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (2 preceding siblings ...)
  2022-01-15  5:04 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-15  6:34 ` unspecd
  2022-01-15  6:38 ` unspecd
                   ` (60 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 12873 bytes --]

From 9ac61e1412d04881268bc908b777adb957be0016 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/2] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index d35944228287..ae32d2fe7038 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 9d5a75a740c0ea7e72b0d8375b004de25ca7bfd9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/2] gnuradio: update to 3.10.0.0.

---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 ++++++++++++------
 5 files changed, 47 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ae32d2fe7038..4b6887d5bed9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..fd4edf336a9a 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,41 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel libsodium-devel
+ libusb-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (3 preceding siblings ...)
  2022-01-15  6:34 ` [PR PATCH] [Updated] gnuradio: update to 3.10.0.0 unspecd
@ 2022-01-15  6:38 ` unspecd
  2022-01-15  6:45 ` unspecd
                   ` (59 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 406 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013455730

Comment:
GrSwig is deprecated in 3.9, so `gnuradio-nrsc5`, `gnuradio-osmosdr` and `gqrx` cannot be revbumped. Here are similar issues:
- gnuradio/gr-bokehgui/issues/34
- https://github.com/ptrkrysik/gr-gsm/issues/582
- https://github.com/troycurtisjr/gr-pager/issues/8


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (4 preceding siblings ...)
  2022-01-15  6:38 ` unspecd
@ 2022-01-15  6:45 ` unspecd
  2022-01-15  6:55 ` [PR PATCH] [Updated] " unspecd
                   ` (58 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 338 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013625999

Comment:
https://github.com/void-linux/void-packages/runs/4824997265?check_suite_focus=true#step:7:1764
> Python config failure: Python is 64-bit, chosen compiler is 32-bit

Need help to fix this error.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (5 preceding siblings ...)
  2022-01-15  6:45 ` unspecd
@ 2022-01-15  6:55 ` unspecd
  2022-01-15 20:12 ` unspecd
                   ` (57 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 15402 bytes --]

From 9ac61e1412d04881268bc908b777adb957be0016 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/5] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index d35944228287..ae32d2fe7038 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 9d5a75a740c0ea7e72b0d8375b004de25ca7bfd9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/5] gnuradio: update to 3.10.0.0.

---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 ++++++++++++------
 5 files changed, 47 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ae32d2fe7038..4b6887d5bed9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..fd4edf336a9a 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,41 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel libsodium-devel
+ libusb-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

From 7adc8b61de9c7b7f4ed47740c09f571c423302c9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 3/5] gnuradio-nrsc5: broken

---
 srcpkgs/gnuradio-nrsc5/template | 1 +
 1 file changed, 1 insertion(+)

diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..da636f6654cf 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -14,6 +14,7 @@ license="GPL-3.0-or-later"
 homepage="https://github.com/argilo/gr-nrsc5/"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
 checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+broken="Incompatible with current gnuradio"
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 867bd1bdce4e23c2c54b55f45f28bca0fab64cd0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 4/5] gnuradio-osmosdr: broken

---
 srcpkgs/gnuradio-osmosdr/template | 1 +
 1 file changed, 1 insertion(+)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..e211a7bb2a95 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -14,6 +14,7 @@ license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
 distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
 checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+broken="Incompatible with current gnuradio"
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 639468741b1a66026a440f3dbeed17231066890c Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 5/5] gnuradio-rds: broken

---
 srcpkgs/gnuradio-rds/template | 1 +
 1 file changed, 1 insertion(+)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..224cb543ceb8 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -13,6 +13,7 @@ license="GPL-2.0-or-later"
 homepage="https://github.com/bastibl/gr-rds/"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
 checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+broken="Incompatible with current gnuradio"
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (6 preceding siblings ...)
  2022-01-15  6:55 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-15 20:12 ` unspecd
  2022-01-15 22:08 ` unspecd
                   ` (56 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15 20:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 380620 bytes --]

From 9ac61e1412d04881268bc908b777adb957be0016 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/6] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index d35944228287..ae32d2fe7038 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From b04b46dbe97b5c99e724027b8512179763b8d831 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/6] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ae32d2fe7038..4b6887d5bed9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..e6d826e0f206 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 614bc1c7e4a2f857524a0588bfb39b5b1f827c56 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 3/6] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..e723ce369750 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From a3c509976627eebe8527a3fa3c496964e8fae786 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 4/6] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..91ea824f9e3b 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 9cf207b3ac4b416fe4c69849e198f49d2912c3a0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 5/6] gnuradio-rds: update to latest git revision

No release tag since 2020-01-06.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..5cd351660851 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,23 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
-wrksrc="gr-rds-${version}"
+version=3.8.0git
+revision=1
+_githash=113b70bc0bfb8dccb2358d571ba64c0d2c90e9b4
+wrksrc="gr-rds-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/bastibl/gr-rds/"
-distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+distfiles="https://github.com/bastibl/gr-rds/archive/${_githash}.tar.gz"
+checksum=8c5ab468388758d63e6e90126dddc3d5aa3ba8327e27ba9a4c4eda3930f0d19a
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From a3f1fc0718617101e019664afe07e1de15be79b4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 6/6] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (7 preceding siblings ...)
  2022-01-15 20:12 ` unspecd
@ 2022-01-15 22:08 ` unspecd
  2022-01-17  9:03 ` [PR REVIEW] " ericonr
                   ` (55 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15 22:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 253 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013761792

Comment:
> `gnuradio-nrsc5`, `gnuradio-osmosdr` and `gqrx` cannot be revbumped

Fixed by updating to latest revisions.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (8 preceding siblings ...)
  2022-01-15 22:08 ` unspecd
@ 2022-01-17  9:03 ` ericonr
  2022-01-17  9:03 ` ericonr
                   ` (54 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-01-17  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 206 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785754909

Comment:
What does this todo mean? Is it just missing functionality?

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (9 preceding siblings ...)
  2022-01-17  9:03 ` [PR REVIEW] " ericonr
@ 2022-01-17  9:03 ` ericonr
  2022-01-17  9:03 ` ericonr
                   ` (53 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-01-17  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 179 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785755665

Comment:
Will try to investigate this ;-;

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (10 preceding siblings ...)
  2022-01-17  9:03 ` ericonr
@ 2022-01-17  9:03 ` ericonr
  2022-01-17 11:10 ` unspecd
                   ` (52 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-01-17  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 182 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785755260

Comment:
Any chance it can use SDL2 instead?

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (11 preceding siblings ...)
  2022-01-17  9:03 ` ericonr
@ 2022-01-17 11:10 ` unspecd
  2022-01-17 11:10 ` unspecd
                   ` (51 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-17 11:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 590 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785865792

Comment:
No, they use SDL_Overlay is no longer available in SDL2: 
```console
$ git clone https://github.com/gnuradio/gnuradio
$ cd gnuradio && grep -Rhow 'SDL_[A-Z][a-z][a-zA-Z]*' gr-video-sdl/lib/ | sort | uniq
SDL_CreateYUVOverlay
SDL_Delay
SDL_DisplayYUVOverlay
SDL_Flip
SDL_FreeYUVOverlay
SDL_GetError
SDL_GetTicks
SDL_Init
SDL_LockYUVOverlay
SDL_Overlay
SDL_Quit
SDL_Rect
SDL_SetVideoMode
SDL_Surface
SDL_UnlockYUVOverlay
```


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (12 preceding siblings ...)
  2022-01-17 11:10 ` unspecd
@ 2022-01-17 11:10 ` unspecd
  2022-01-17 13:10 ` unspecd
                   ` (50 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-17 11:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 595 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785865792

Comment:
No, they use SDL_Overlay that is no longer available in SDL2: 
```console
$ git clone https://github.com/gnuradio/gnuradio
$ cd gnuradio && grep -Rhow 'SDL_[A-Z][a-z][a-zA-Z]*' gr-video-sdl/lib/ | sort | uniq
SDL_CreateYUVOverlay
SDL_Delay
SDL_DisplayYUVOverlay
SDL_Flip
SDL_FreeYUVOverlay
SDL_GetError
SDL_GetTicks
SDL_Init
SDL_LockYUVOverlay
SDL_Overlay
SDL_Quit
SDL_Rect
SDL_SetVideoMode
SDL_Surface
SDL_UnlockYUVOverlay
```


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (13 preceding siblings ...)
  2022-01-17 11:10 ` unspecd
@ 2022-01-17 13:10 ` unspecd
  2022-01-18 10:35 ` [PR PATCH] [Updated] " unspecd
                   ` (49 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-17 13:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1199 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785992198

Comment:
This is used internally to generate Python bindings. In the release tarballs these binding are pre-generated. In any case, it would be nice to have this package in Void.

Here is what the [documentation](https://github.com/gnuradio/gnuradio/blob/master/docs/PYBIND11.md) says:

---

### Generating/maintaining Python bindings using Pybind11

As of the GNU Radio 3.9 release, python bindings are handled using pybind11, which is inherently different than they were in previous releases

#### Dependencies

- pybind11 > 2.4.3 https://pybind11.readthedocs.io/
- pygccxml https://pygccxml.readthedocs.io/en/develop/install.html
  - This is an optional dependency and basic functionality for OOT generation can be performed without pygccxml
  - It is required for automatically generating bindings for most of the GR source tree

...

Each block binding file contains an automatically generated and maintained comment block that informs CMake when the bindings are out of sync with the header file they refer to, and what to do about it


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (14 preceding siblings ...)
  2022-01-17 13:10 ` unspecd
@ 2022-01-18 10:35 ` unspecd
  2022-01-18 10:35 ` unspecd
                   ` (48 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 10:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383207 bytes --]

From 801687687f4c237813328110f9ede8c6549f9646 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index b07e14379e28..154496b36c99 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From d4a0bcefb155f21aec033618b0eed19cda70bcb3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From ff2406945e7e570d1bcf27f59a5b6cfb7ddc575b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 2ccdf797bdd4210f280f163acc94826d26ae89d3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 +++++++++++-------
 5 files changed, 46 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index 154496b36c99..ecca45503159 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..5bba5d71d4d7 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,39 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pygccxml python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +50,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 4a60d8a01225708a16d4a382e525940cd1d9b55f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..e723ce369750 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From b629fdc7a38847bfe3e5e677f488412371c59a9a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..91ea824f9e3b 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 39685f7ebba738a8470ad18362cc47bc9ab6695d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 0578e6d35990da439cec99bb58df60a58823333b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (15 preceding siblings ...)
  2022-01-18 10:35 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-18 10:35 ` unspecd
  2022-01-18 10:40 ` unspecd
                   ` (47 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 10:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 165 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1015280515

Comment:
Added python3-pygccxml.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (16 preceding siblings ...)
  2022-01-18 10:35 ` unspecd
@ 2022-01-18 10:40 ` unspecd
  2022-01-18 11:04 ` [PR PATCH] [Updated] " unspecd
                   ` (46 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 10:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 171 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1015284201

Comment:
Updated gnuradio-rds to 3.10.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (17 preceding siblings ...)
  2022-01-18 10:40 ` unspecd
@ 2022-01-18 11:04 ` unspecd
  2022-01-18 11:06 ` unspecd
                   ` (45 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 11:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383223 bytes --]

From 801687687f4c237813328110f9ede8c6549f9646 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index b07e14379e28..154496b36c99 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From d4a0bcefb155f21aec033618b0eed19cda70bcb3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From ff2406945e7e570d1bcf27f59a5b6cfb7ddc575b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 2ccdf797bdd4210f280f163acc94826d26ae89d3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 +++++++++++-------
 5 files changed, 46 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index 154496b36c99..ecca45503159 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..5bba5d71d4d7 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,39 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pygccxml python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +50,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 30ca096b6d07b54340e76fab00a3c801aeff0181 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From d0e18000fb25efcae2200783db8e999135847faa Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 1e3fa27391a3ffb9531ef2ebcd3cfde8e3f8f868 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From c8f1578877ae592c3d18ec99fae70d6e6a36b3fb Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (18 preceding siblings ...)
  2022-01-18 11:04 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-18 11:06 ` unspecd
  2022-01-21  7:33 ` [PR PATCH] [Updated] " unspecd
                   ` (44 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 11:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 231 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1015304918

Comment:
> I think the git packages should have a date after git to show when it's from.

Fixed.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (19 preceding siblings ...)
  2022-01-18 11:06 ` unspecd
@ 2022-01-21  7:33 ` unspecd
  2022-01-22  5:54 ` unspecd
                   ` (43 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-21  7:33 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383243 bytes --]

From 80b06c98c3cb9cea9cfec0162141ee92121411be Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index b07e14379e28..154496b36c99 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 5d3b469dda1a55fdd18ddaa1f7d9cb3e3b76b1df Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From c3094ecc7e172c22713093ea718a7943dfd7d4f6 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 0fea1f604ed0316af3256e3d46ade76527d2da38 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index 154496b36c99..ecca45503159 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 24326dc4bfdb2c7b2e21902efae23a802ea63cff Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 99428d3a51ec0f978dbe6d8985e5e7b677bebc98 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 14e47d3c62743b75ccf19f75233dad8253364ff4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From a5906ece2e06be4ea5b9882d86e966a22f5b26c1 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (20 preceding siblings ...)
  2022-01-21  7:33 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-22  5:54 ` unspecd
  2022-01-29  4:25 ` unspecd
                   ` (42 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-22  5:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383243 bytes --]

From c6b269a9c7670c24f172afa6aac819e37d25d7da Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 6fe46eaaeb05..ec2e038044b9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4100,3 +4100,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From f7cf1a44860f83cc7f1276a4e151fc7ef114d280 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From b37158282cf89c7c021d3c2d96c7a05e9c80b19e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From a2ece9488b4a1816844cf0ceb9b1dba163275633 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ec2e038044b9..a796db1c93a4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3242,22 +3242,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From a77b0042c746b15fcd57d29d567ba754d952168c Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 93ffb4c57eb4066ad4983ead4278c71ac53613f4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 5005749e372bde83ea8b7023c179c56cabc3830f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 20d98f67bee221fba0f523b6286f56015cb938e8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (21 preceding siblings ...)
  2022-01-22  5:54 ` unspecd
@ 2022-01-29  4:25 ` unspecd
  2022-01-29  9:37 ` unspecd
                   ` (41 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-29  4:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383217 bytes --]

From e288f18d76e86d7883c07f2ae31b6e8e5cec3000 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From bbfa93d27411033f3f1c04c2fceaa1868d3748c8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 497e23a186ae4bda28ebba06b53c61fe2f69aad8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 892d2f95d7b68c739ea1155da5da9b04f25a77ef Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..caddf4c4df1e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From d60d7f692ac05e9c458c190879858596bcc45e02 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 02c2d8f8d70421d606f1e8f9c5784fc256afe9c5 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From c410ec395b6a822e5025025d69a8618ffbd3b5bd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From aa363013320509d096659bcd213e9c893076cf6d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (22 preceding siblings ...)
  2022-01-29  4:25 ` unspecd
@ 2022-01-29  9:37 ` unspecd
  2022-01-29  9:39 ` unspecd
                   ` (40 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-29  9:37 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383517 bytes --]

From e288f18d76e86d7883c07f2ae31b6e8e5cec3000 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From bbfa93d27411033f3f1c04c2fceaa1868d3748c8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 497e23a186ae4bda28ebba06b53c61fe2f69aad8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 892d2f95d7b68c739ea1155da5da9b04f25a77ef Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..caddf4c4df1e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From d60d7f692ac05e9c458c190879858596bcc45e02 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 02c2d8f8d70421d606f1e8f9c5784fc256afe9c5 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From c410ec395b6a822e5025025d69a8618ffbd3b5bd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From e6fb2635d8de4ab709c37ac87b8922a72717b4ec Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..f4717b7d8e7c 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
+depends="desktop-file-utils"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (23 preceding siblings ...)
  2022-01-29  9:37 ` unspecd
@ 2022-01-29  9:39 ` unspecd
  2022-01-29 10:50 ` unspecd
                   ` (39 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-29  9:39 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383517 bytes --]

From e288f18d76e86d7883c07f2ae31b6e8e5cec3000 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From bbfa93d27411033f3f1c04c2fceaa1868d3748c8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 497e23a186ae4bda28ebba06b53c61fe2f69aad8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 892d2f95d7b68c739ea1155da5da9b04f25a77ef Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..caddf4c4df1e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From d60d7f692ac05e9c458c190879858596bcc45e02 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 02c2d8f8d70421d606f1e8f9c5784fc256afe9c5 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From c410ec395b6a822e5025025d69a8618ffbd3b5bd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From c4a9d679c6d45236ac99ddff3c85bdef3dce50ca Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (24 preceding siblings ...)
  2022-01-29  9:39 ` unspecd
@ 2022-01-29 10:50 ` unspecd
  2022-02-01  8:38 ` [PR PATCH] [Updated] " unspecd
                   ` (38 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-29 10:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 165 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1024887718

Comment:
Updated gqrx to 2.15.8.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (25 preceding siblings ...)
  2022-01-29 10:50 ` unspecd
@ 2022-02-01  8:38 ` unspecd
  2022-02-02  9:11 ` unspecd
                   ` (37 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-01  8:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 384464 bytes --]

From 94148b281b483265085d0d60b95da101ea463b90 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 02c7bb1eec16d782bf633586863966987688de62 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 550326c4c8dc62e25ef849ee6a1cdeb99bfe5401 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From d027633b2b45e670dc1ece38a660aee7b9e2be2a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 srcpkgs/gnuradio/template                     | 38 +++++++++------
 5 files changed, 47 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..caddf4c4df1e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 1e7ac69399183cf1f2b3b32de4cad00a7e2c827d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 8db160a3a8b823cfd070718ba5c21765f5d684ee Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 56188752646095beaaf0014dcdec096b77cf39d7 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From f12f347c39468c88721e072986d1a9643abbd84b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (26 preceding siblings ...)
  2022-02-01  8:38 ` [PR PATCH] [Updated] " unspecd
@ 2022-02-02  9:11 ` unspecd
  2022-02-02 10:21 ` gnuradio: update to 3.10.1.0 unspecd
                   ` (36 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-02  9:11 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 384464 bytes --]

From 94148b281b483265085d0d60b95da101ea463b90 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 02c7bb1eec16d782bf633586863966987688de62 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 550326c4c8dc62e25ef849ee6a1cdeb99bfe5401 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From d027633b2b45e670dc1ece38a660aee7b9e2be2a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 srcpkgs/gnuradio/template                     | 38 +++++++++------
 5 files changed, 47 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..caddf4c4df1e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..834272a6b446 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 1e7ac69399183cf1f2b3b32de4cad00a7e2c827d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 8db160a3a8b823cfd070718ba5c21765f5d684ee Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 56188752646095beaaf0014dcdec096b77cf39d7 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From f12f347c39468c88721e072986d1a9643abbd84b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.1.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (27 preceding siblings ...)
  2022-02-02  9:11 ` unspecd
@ 2022-02-02 10:21 ` unspecd
  2022-02-02 10:27 ` [PR PATCH] [Updated] " unspecd
                   ` (35 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-02 10:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 171 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1027785927

Comment:
Updated gnuradio to 3.10.1.0.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (28 preceding siblings ...)
  2022-02-02 10:21 ` gnuradio: update to 3.10.1.0 unspecd
@ 2022-02-02 10:27 ` unspecd
  2022-02-02 11:10 ` unspecd
                   ` (34 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-02 10:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 384464 bytes --]

From 8bb045c44757fa48cc0afda98a27c0bdd3ec4c43 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From fb99504c126aa7eb6bbe64baa7905896618562a4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From a8ad3799f2bd8b6d4c7a2d7d0df5b8b1153221cd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From deacfb8f87e57cb35445ab32469cc80022a437b0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 srcpkgs/gnuradio/template                     | 38 +++++++++------
 5 files changed, 47 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..69ad02e38828 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..d478efb77f5e 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=e92031db731c20999e2eb4aca3aa9ec1a3991c465f67bd0cc7f22461b0cb3a27
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 72ab6679cccc49de5791ae0c18e9a675a90677c8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From ad02e4d0ba2b987f05554b559d501b304ef46cb3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 206a698dee5db533c28ba2eda5bd92a0ca7ca257 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From a8596882d2679f1693f808b9e59793bafd2a5f8d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (29 preceding siblings ...)
  2022-02-02 10:27 ` [PR PATCH] [Updated] " unspecd
@ 2022-02-02 11:10 ` unspecd
  2022-02-02 11:12 ` unspecd
                   ` (33 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-02 11:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 384464 bytes --]

From 8bb045c44757fa48cc0afda98a27c0bdd3ec4c43 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index edcf9daee61c..be8e9ceb7249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4103,3 +4103,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From fb99504c126aa7eb6bbe64baa7905896618562a4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From a8ad3799f2bd8b6d4c7a2d7d0df5b8b1153221cd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 3ec08d84d6c5ba5a4979698856bdeb47a8b4beb8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.1.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 srcpkgs/gnuradio/template                     | 38 +++++++++------
 5 files changed, 47 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index be8e9ceb7249..69ad02e38828 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..4a68df2c6f9a 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.1
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 python3-pygccxml ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=1fa720cdb30db4edc513e7b40f3ce0e12844cc93015366cc4cab8707e02ed1fe
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 5efe1c64c4a5ed169f0671451bd6fb65f308ab93 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 9399db614a97c04bf3bc770c69f42ce1411bcdd2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From b07f8ab324f441ae18103240586b7611c19079cd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From e71ef301bc15c48196e2bc62cd2bc6ea7f9ae29e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.1.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (30 preceding siblings ...)
  2022-02-02 11:10 ` unspecd
@ 2022-02-02 11:12 ` unspecd
  2022-02-04 11:24 ` [PR PATCH] [Updated] gnuradio: update to 3.10.1.1 unspecd
                   ` (32 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-02 11:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 171 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1027785927

Comment:
Updated gnuradio to 3.10.1.1.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (31 preceding siblings ...)
  2022-02-02 11:12 ` unspecd
@ 2022-02-04 11:24 ` unspecd
  2022-02-20  8:34 ` unspecd
                   ` (31 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-04 11:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.1.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386729 bytes --]

From b82723679828b0774cbda7fcfe04fe629cdf5329 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 76df17e8ba13..dff0f2c56e82 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4102,3 +4102,4 @@ libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
 libdeflate.so.0 libdeflate-1.8_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 27b9f50c8707a1e9723cd8899f91a6239827cd12 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 0cd6ba21317818971538161ccb4013f9e40073f2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 480305938a0d77774097d43116b45527bc0b8c10 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.1.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index dff0f2c56e82..1357d4552b77 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3243,22 +3243,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..1c7e458eca83 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.1
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=1fa720cdb30db4edc513e7b40f3ce0e12844cc93015366cc4cab8707e02ed1fe
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 3e215dbae71d1834c2ffb94ed8ceee15e9fe9257 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From e6d90c5545cccff9e4100fd322b562426304213e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 262b382554db60f9194ebcd4a46bc277cd0ab4fd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 5da1692ae46860dc7445c2aab48979c4c713ecfc Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (32 preceding siblings ...)
  2022-02-04 11:24 ` [PR PATCH] [Updated] gnuradio: update to 3.10.1.1 unspecd
@ 2022-02-20  8:34 ` unspecd
  2022-03-31  8:09 ` unspecd
                   ` (30 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-02-20  8:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.1.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386732 bytes --]

From 21d9001ad777b9a04667eaa8585c57eff08055e2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 7c253776c381..e243dbd1ca1e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4111,3 +4111,4 @@ libawt_xawt.so openjdk17-jre-17.0.1+12_1
 libjava.so openjdk17-jre-17.0.1+12_1
 libjli.so openjdk17-jre-17.0.1+12_1
 libjvm.so openjdk17-jre-17.0.1+12_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 2eb150a53fd04f97c4c0fc137e26c9395a06e190 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 0731e22bae66ca5aadaae1d5aa4f2ae6cb969302 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 27f22f5ac7b23d069e0b530ceae3f7eca5be1092 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.1.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index e243dbd1ca1e..96c302264425 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3244,22 +3244,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..1c7e458eca83 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.1
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=1fa720cdb30db4edc513e7b40f3ce0e12844cc93015366cc4cab8707e02ed1fe
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 3fb23b4fefae4a70a08161ae4c357843273814b8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..f347cd547d6e 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git20210425
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 96d28310f56c4f69238274764c0f717206168563 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 6749ffe5930f17fcf0b7018c8aab6428ecc6aa06 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 498fee7552e5bc91f654f006cd53d795ecf924ea Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (33 preceding siblings ...)
  2022-02-20  8:34 ` unspecd
@ 2022-03-31  8:09 ` unspecd
  2022-03-31  8:10 ` unspecd
                   ` (29 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-03-31  8:09 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.1.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386508 bytes --]

From dbd85e8954ab3683aad543f2f92c0adc8af1724b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index ccc55a1b3772..87dd60b9e318 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4145,3 +4145,4 @@ librz_lang.so.0.3.4 rizin-0.3.4_1
 librz_search.so.0.3.4 rizin-0.3.4_1
 librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From e7b3e48a1356cb1ef733a41d6e79bcfe616d2946 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 0bf93b140b03e2f1eb73aa977b1f9525b72740a7 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From a8030e7678a37fbac0d537c2c966a94020293f34 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.1.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index 87dd60b9e318..029f203537fa 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3245,22 +3245,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..1c7e458eca83 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.1
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=1fa720cdb30db4edc513e7b40f3ce0e12844cc93015366cc4cab8707e02ed1fe
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 2444dbd3bf13edfc6a41a77f4b37fafc19f7a59b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From df9cfd741ccea658e5037ea87c2903bb92025c3a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 5d2cf878391b797e8452b889e6d0e0144338953f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 6baaac60425d3e3b3b2acc4ca9b8f864065e59c6 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (34 preceding siblings ...)
  2022-03-31  8:09 ` unspecd
@ 2022-03-31  8:10 ` unspecd
  2022-04-11 16:29 ` [PR PATCH] [Updated] " unspecd
                   ` (28 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-03-31  8:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 174 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1084242495

Comment:
Updated gnuradio-nrsc5 to 2.0.0.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (35 preceding siblings ...)
  2022-03-31  8:10 ` unspecd
@ 2022-04-11 16:29 ` unspecd
  2022-04-14  7:59 ` unspecd
                   ` (27 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-04-11 16:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.1.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386571 bytes --]

From ab26fcd97f83c697eb6d7c0b471fae3b98070878 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  2 ++
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 46 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 0ac24701898d..c13dba6dd46c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4147,3 +4147,5 @@ librz_search.so.0.3.4 rizin-0.3.4_1
 librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
+libdbusmenu-glib.so.4 android-studio-2021.1.1.22_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 82e0edbb0f19a8749bcab546f3fda8445e9261dc Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From b3985035ceef99d371649e0c3de6009226e92532 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From f59b97d1ec4eaa553766fb2b49f6f3e75059c93f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.1.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index c13dba6dd46c..ea219320b52b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3245,22 +3245,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..1c7e458eca83 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.1
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=1fa720cdb30db4edc513e7b40f3ce0e12844cc93015366cc4cab8707e02ed1fe
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From d47e1312048768857edbddfa1c7a5d59c08525a2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 79ad5043a79d26322ef0fddf9acf85b260c32181 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From f96d85a9f85354135833a9455a9100881f2dc39f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 20e59821159aacfc2a79866f68c22c78cf0fb2fd Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.8.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..7cdea38fa2c3 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.8
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=72184e48a87b70dbfa55b67944c601a26a001db01f7f62b373b349cb73c1d0bd
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (36 preceding siblings ...)
  2022-04-11 16:29 ` [PR PATCH] [Updated] " unspecd
@ 2022-04-14  7:59 ` unspecd
  2022-04-14 12:52 ` unspecd
                   ` (26 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-04-14  7:59 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.1.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386571 bytes --]

From ab26fcd97f83c697eb6d7c0b471fae3b98070878 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  2 ++
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 46 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 0ac24701898d..c13dba6dd46c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4147,3 +4147,5 @@ librz_search.so.0.3.4 rizin-0.3.4_1
 librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
+libdbusmenu-glib.so.4 android-studio-2021.1.1.22_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 82e0edbb0f19a8749bcab546f3fda8445e9261dc Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From b3985035ceef99d371649e0c3de6009226e92532 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From f59b97d1ec4eaa553766fb2b49f6f3e75059c93f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.1.1.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index c13dba6dd46c..ea219320b52b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3245,22 +3245,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pmt.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-blocks.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-audio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fec.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-fft.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-filter.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-analog.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-digital.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-dtv.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-channels.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-trellis.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-video-sdl.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-vocoder.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-wavelet.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-uhd.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-network.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-soapy.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-qtgui.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-zeromq.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-iio.so.3.10.1 gnuradio-3.10.1.0_1
+libgnuradio-pdu.so.3.10.1 gnuradio-3.10.1.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..1c7e458eca83 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.1.1
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=1fa720cdb30db4edc513e7b40f3ce0e12844cc93015366cc4cab8707e02ed1fe
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From d47e1312048768857edbddfa1c7a5d59c08525a2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 79ad5043a79d26322ef0fddf9acf85b260c32181 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From f96d85a9f85354135833a9455a9100881f2dc39f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From b84317fa99e28e3cd9fd359b7e467dec63f3a9f1 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (37 preceding siblings ...)
  2022-04-14  7:59 ` unspecd
@ 2022-04-14 12:52 ` unspecd
  2022-04-18  1:00 ` [PR PATCH] [Updated] " unspecd
                   ` (25 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-04-14 12:52 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 165 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1099153996

Comment:
Updated gqrx to 2.15.9.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.1.1.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (38 preceding siblings ...)
  2022-04-14 12:52 ` unspecd
@ 2022-04-18  1:00 ` unspecd
  2022-06-21 22:24 ` [PR PATCH] [Updated] gnuradio: update to 3.10.2.0 unspecd
                   ` (24 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-04-18  1:00 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.1.1.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386590 bytes --]

From 7ba5504cba66f5389305915848a089a3b045c2a8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  2 ++
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 46 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index ae4bb44c57a3..dbb4f898daf7 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4148,3 +4148,5 @@ librz_search.so.0.3.4 rizin-0.3.4_1
 librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
+libdbusmenu-glib.so.4 android-studio-2021.1.1.22_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From f2d844b4861ee44c98ceacb4f563851ea23258f8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 2d4c802367d56b23683984906e8a752ef1649c7c Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 084f7bfa058e65101f4f535b69a69bcaeac003ff Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.2.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index dbb4f898daf7..62f1fded5795 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3246,22 +3246,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-pmt.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-blocks.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-audio.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-fec.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-fft.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-filter.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-analog.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-digital.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-dtv.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-channels.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-trellis.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-video-sdl.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-vocoder.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-wavelet.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-uhd.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-network.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-soapy.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-qtgui.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-zeromq.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-iio.so.3.10.2 gnuradio-3.10.2.0_1
+libgnuradio-pdu.so.3.10.2 gnuradio-3.10.2.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..1756eda7d5ee 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.2.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=a8f6c1cc98bc3784aa70ab29d3039ad6922ec36f908ecfb2c904a597b32c0776
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 32d73369be235f26a34c3d6fb3f48fb66cae7873 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 8feb898f28db98a247f487544492e67cc5624bc1 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From a04e982eea66b56369da6b3cf9c48d7a128bc191 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From ad43fec321ae4c73313afdf3d22eaf2eaf4d0a96 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.2.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (39 preceding siblings ...)
  2022-04-18  1:00 ` [PR PATCH] [Updated] " unspecd
@ 2022-06-21 22:24 ` unspecd
  2022-06-21 22:27 ` gnuradio: update to 3.10.3.0 unspecd
                   ` (23 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-21 22:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.2.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386616 bytes --]

From 70b499520537da24c1429f71ee5fbae02a2e468f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  2 ++
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 46 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 91d4514ed285..528fa1219755 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4167,3 +4167,5 @@ liblowdown.so lowdown-0.11.2_1
 libjaylink.so.0 libjaylink-0.2.0_1
 libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
+libdbusmenu-glib.so.4 android-studio-2021.1.1.22_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 02a8a2afa00035d62b048abd42262446e3fb390e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From b7722b640dd9c122cdc1a951cf596c8be3276d79 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 4a4eb0d9db5ed41e849e5ade176be7ab919909c2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index 528fa1219755..ec77ec2e6fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3242,22 +3242,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..ad8a8563d576 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 2b819dad0d748bddb2bbd5dda23d8a4b4bc129fb Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From fd4746ac7785f2c04e679204f6a7eab520b50972 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From ef766bf21b141de3f90b22a6f1e629b49d3a8bcc Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 044cf926d10851f386c082f569601c26e2d8dbe0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (40 preceding siblings ...)
  2022-06-21 22:24 ` [PR PATCH] [Updated] gnuradio: update to 3.10.2.0 unspecd
@ 2022-06-21 22:27 ` unspecd
  2022-06-22 18:37 ` classabbyamp
                   ` (22 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-21 22:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 171 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1162425785

Comment:
Updated gnuradio to 3.10.3.0.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (41 preceding siblings ...)
  2022-06-21 22:27 ` gnuradio: update to 3.10.3.0 unspecd
@ 2022-06-22 18:37 ` classabbyamp
  2022-06-27  3:37 ` unspecd
                   ` (21 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: classabbyamp @ 2022-06-22 18:37 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 177 bytes --]

New comment by classabbyamp on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1163475432

Comment:
what's the status of this PR? 

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (42 preceding siblings ...)
  2022-06-22 18:37 ` classabbyamp
@ 2022-06-27  3:37 ` unspecd
  2022-06-28  3:23 ` classabbyamp
                   ` (20 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-27  3:37 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 310 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1166800408

Comment:
The only thing to do is to make the python3-pygccxml tests pass on i686, but I don't have enough time to dig into it now.

I just keep packages in this PR up to date.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (43 preceding siblings ...)
  2022-06-27  3:37 ` unspecd
@ 2022-06-28  3:23 ` classabbyamp
  2022-06-28  5:23 ` [PR PATCH] [Updated] " unspecd
                   ` (19 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: classabbyamp @ 2022-06-28  3:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 306 bytes --]

New comment by classabbyamp on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1168173116

Comment:
I did some digging on those test failures, and I think it would be fine to report the failures to upstream and `make_check=no` on i686 with a link to the issue

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (44 preceding siblings ...)
  2022-06-28  3:23 ` classabbyamp
@ 2022-06-28  5:23 ` unspecd
  2022-06-28 14:53 ` unspecd
                   ` (18 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-28  5:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.3.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386747 bytes --]

From 70b499520537da24c1429f71ee5fbae02a2e468f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  2 ++
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 46 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 91d4514ed285..528fa1219755 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4167,3 +4167,5 @@ liblowdown.so lowdown-0.11.2_1
 libjaylink.so.0 libjaylink-0.2.0_1
 libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
+libdbusmenu-glib.so.4 android-studio-2021.1.1.22_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 02a8a2afa00035d62b048abd42262446e3fb390e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 10025dfe85f8c2890156ed5bf98b975af27d62d6 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 32 +++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..a11c75ad30fa
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,32 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+if [ ${XBPS_TARGET_MACHINE%-musl} = "i686" ]; then
+	make_check=no  # See https://github.com/CastXML/pygccxml/issues/150
+fi
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 73a8acfefa4a8dab2ce67612cc1dc6842c4da1ee Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++-------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -------------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 -------------
 .../patches/fix-x11-library-call.patch        | 39 ++++++++++++++++
 srcpkgs/gnuradio/template                     | 45 ++++++++++++------
 6 files changed, 93 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index 528fa1219755..ec77ec2e6fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3242,22 +3242,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..ad8a8563d576 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,46 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +50,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +58,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From b72913d4e4c1b4c6bd056d35e0d98078a4cacfa1 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 411bc316fcf456fbb71b42d7cf232de44d41998a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 43be4ba70fac80aa5e15c4c24e3d25c02400c5c9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From a9736d25fdfc32380f8b07bcc40c7ea859a4e537 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (45 preceding siblings ...)
  2022-06-28  5:23 ` [PR PATCH] [Updated] " unspecd
@ 2022-06-28 14:53 ` unspecd
  2022-06-28 15:36 ` unspecd
                   ` (17 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-28 14:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 350 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1168830668

Comment:
> The only thing to do is to make the python3-pygccxml tests pass on i686

Oops, it wasn't the only problem.
https://github.com/void-linux/void-packages/runs/7086379225?check_suite_focus=true#step:7:11294.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (46 preceding siblings ...)
  2022-06-28 14:53 ` unspecd
@ 2022-06-28 15:36 ` unspecd
  2022-06-28 15:36 ` unspecd
                   ` (16 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-28 15:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 402 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1168830668

Comment:
> The only thing to do is to make the python3-pygccxml tests pass on i686

Oops, it wasn't the only problem.
https://github.com/void-linux/void-packages/runs/7086379225?check_suite_focus=true#step:7:11294.

https://github.com/gnuradio/gnuradio/issues/5973

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (47 preceding siblings ...)
  2022-06-28 15:36 ` unspecd
@ 2022-06-28 15:36 ` unspecd
  2022-07-17 16:27 ` Noah-Huppert
                   ` (15 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-06-28 15:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 401 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1168830668

Comment:
> The only thing to do is to make the python3-pygccxml tests pass on i686

Oops, it wasn't the only problem. https://github.com/void-linux/void-packages/runs/7086379225?check_suite_focus=true#step:7:11294.

https://github.com/gnuradio/gnuradio/issues/5973

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (48 preceding siblings ...)
  2022-06-28 15:36 ` unspecd
@ 2022-07-17 16:27 ` Noah-Huppert
  2022-07-17 18:56 ` ericonr
                   ` (14 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: Noah-Huppert @ 2022-07-17 16:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 400 bytes --]

New comment by Noah-Huppert on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1186562363

Comment:
When I was trying to compile 3.10 I ran into a bunch of problems where GNU Radio changed from boost smart pointers to std lib smart pointers, and also changed from swig to pybind11. So a bunch of addons were incompatible. Were you able to navigate this?

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (49 preceding siblings ...)
  2022-07-17 16:27 ` Noah-Huppert
@ 2022-07-17 18:56 ` ericonr
  2022-07-17 18:57 ` ericonr
                   ` (13 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-07-17 18:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 276 bytes --]

New comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1186589322

Comment:
@unspecd I am in agreement with abby; I think we should try moving this forward without perfect correctness in i686, at least for now.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (50 preceding siblings ...)
  2022-07-17 18:56 ` ericonr
@ 2022-07-17 18:57 ` ericonr
  2022-07-17 21:59 ` [PR PATCH] [Updated] " unspecd
                   ` (12 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-07-17 18:57 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 363 bytes --]

New comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1186589322

Comment:
@unspecd I am in agreement with abby; I think we should try moving this forward without perfect correctness in i686, at least for now.

You mentioned being busy, so don't feel rushed, I'm just supporting the decision :)

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (51 preceding siblings ...)
  2022-07-17 18:57 ` ericonr
@ 2022-07-17 21:59 ` unspecd
  2022-07-17 22:44 ` unspecd
                   ` (11 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-17 21:59 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.3.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386832 bytes --]

From 76058f188a9f69d20b3b67d34c1be31a801f244e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index c0b708dd7a3d..dc148c255792 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4175,3 +4175,4 @@ libjaylink.so.0 libjaylink-0.2.0_1
 libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
 libqtspell-qt5.so.1 qtspell-1.0.1_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 1e08a44367a4f68279382d2074e24e738af2569a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 20f2f3746a0ebef2b35035585e9708747260581f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 32 +++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..a11c75ad30fa
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,32 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+if [ ${XBPS_TARGET_MACHINE%-musl} = "i686" ]; then
+	make_check=no  # See https://github.com/CastXML/pygccxml/issues/150
+fi
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 9aa84f257ca123ee6458916a821d864848bb7913 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -----------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ------------
 .../patches/fix-x11-library-call.patch        | 39 +++++++++++++++
 srcpkgs/gnuradio/template                     | 49 ++++++++++++++-----
 6 files changed, 97 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index dc148c255792..3c88c379f451 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3249,22 +3249,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..cb7afd79710c 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,50 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
+if [ "${XBPS_TARGET_MACHINE%-musl}" = "i686" ]; then
+	make_check=ci-skip  # See https://github.com/gnuradio/gnuradio/issues/5973
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +54,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +62,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 34c7fc25e4073dbb35c99c39b588e97a7e2f3eb3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 0f0f90339421de7602cc5b19f9ac5dcfef4c5fc5 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 9317dbda4abac0aadebba24ca5bea1a399921fec Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 56ca2e73223843fd128ad92fb5ece1f70678ca37 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (52 preceding siblings ...)
  2022-07-17 21:59 ` [PR PATCH] [Updated] " unspecd
@ 2022-07-17 22:44 ` unspecd
  2022-07-19 15:47 ` [PR REVIEW] " sgn
                   ` (10 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-17 22:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 309 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1186621185

Comment:
> changed from swig to pybind11. So a bunch of addons were incompatible

What addons are you referring to? Probably this should be done by the authors of the addons.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (53 preceding siblings ...)
  2022-07-17 22:44 ` unspecd
@ 2022-07-19 15:47 ` sgn
  2022-07-19 17:06 ` [PR PATCH] [Updated] " unspecd
                   ` (9 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: sgn @ 2022-07-19 15:47 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 184 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r924677102

Comment:
I dont think we need those build options.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (54 preceding siblings ...)
  2022-07-19 15:47 ` [PR REVIEW] " sgn
@ 2022-07-19 17:06 ` unspecd
  2022-07-19 17:10 ` [PR REVIEW] " unspecd
                   ` (8 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-19 17:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.3.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 386616 bytes --]

From 8f4ac0779a8818e415216ac15220e1c506323fd0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 39 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index c0b708dd7a3d..dc148c255792 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4175,3 +4175,4 @@ libjaylink.so.0 libjaylink-0.2.0_1
 libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
 libqtspell-qt5.so.1 qtspell-1.0.1_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..9bbe7feb616a
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,36 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_DOC=YES
+ -DWITH_SERIAL_BACKEND=YES -DHAVE_DNS_SD=YES -DPYTHON_BINDINGS=YES"
+hostmakedepends="bison flex doxygen python3 python3-Sphinx python3-sphinx_rtd_theme"
+makedepends="avahi-libs-devel libaio-devel libserialport-devel libusb-devel libxml2-devel"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 69585a189155e61da7e4b5e29e3c68f126474439 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 4d070cd17609a3f5c3bad8b749a47191a6368031 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 32 +++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..a11c75ad30fa
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,32 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+if [ ${XBPS_TARGET_MACHINE%-musl} = "i686" ]; then
+	make_check=no  # See https://github.com/CastXML/pygccxml/issues/150
+fi
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 42c7d68b8f0df1c571caea7cb45c39fa0b5278ec Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -----------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ------------
 .../patches/fix-x11-library-call.patch        | 39 +++++++++++++++
 srcpkgs/gnuradio/template                     | 49 ++++++++++++++-----
 6 files changed, 97 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index dc148c255792..3c88c379f451 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3249,22 +3249,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..cb7afd79710c 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,50 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
+if [ "${XBPS_TARGET_MACHINE%-musl}" = "i686" ]; then
+	make_check=ci-skip  # See https://github.com/gnuradio/gnuradio/issues/5973
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +54,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +62,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From bdae450db0ff1a83017aa5d62de439364a37556c Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 2 files changed, 12 insertions(+), 13128 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From f03a9d7fcbc26606874b34d16622db5590f6ed25 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From ab8b126a39219008545fe412f39c3be0b24915f2 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 215f142602628542d922100151513a52967098a5 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (55 preceding siblings ...)
  2022-07-19 17:06 ` [PR PATCH] [Updated] " unspecd
@ 2022-07-19 17:10 ` unspecd
  2022-07-19 17:10 ` unspecd
                   ` (7 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-19 17:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 163 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r924766910

Comment:
Ok, removed them

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (56 preceding siblings ...)
  2022-07-19 17:10 ` [PR REVIEW] " unspecd
@ 2022-07-19 17:10 ` unspecd
  2022-07-27  6:30 ` sgn
                   ` (6 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-19 17:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 164 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r924766910

Comment:
Ok, removed them.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (57 preceding siblings ...)
  2022-07-19 17:10 ` unspecd
@ 2022-07-27  6:30 ` sgn
  2022-07-27 11:02 ` [PR PATCH] [Updated] " unspecd
                   ` (5 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: sgn @ 2022-07-27  6:30 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 177 bytes --]

New comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1196318129

Comment:
Please update shlib, then we can merge.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (58 preceding siblings ...)
  2022-07-27  6:30 ` sgn
@ 2022-07-27 11:02 ` unspecd
  2022-07-27 11:05 ` unspecd
                   ` (4 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-27 11:02 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.3.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 387197 bytes --]

From aee55f48e2f26606146875a382f237b9a0b5439a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 39 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index c3dd63f542db..80c03ec1f754 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4175,3 +4175,4 @@ libjaylink.so.0 libjaylink-0.2.0_1
 libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
 libqtspell-qt5.so.1 qtspell-1.0.1_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..9bbe7feb616a
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,36 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_DOC=YES
+ -DWITH_SERIAL_BACKEND=YES -DHAVE_DNS_SD=YES -DPYTHON_BINDINGS=YES"
+hostmakedepends="bison flex doxygen python3 python3-Sphinx python3-sphinx_rtd_theme"
+makedepends="avahi-libs-devel libaio-devel libserialport-devel libusb-devel libxml2-devel"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 7ae25928037305b16216b77e6384ea8ff6d3266f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 3d20ac6094802cbe4f51fcedec005aa02738c014 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 32 +++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..a11c75ad30fa
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,32 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+if [ ${XBPS_TARGET_MACHINE%-musl} = "i686" ]; then
+	make_check=no  # See https://github.com/CastXML/pygccxml/issues/150
+fi
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 81c64e893fffd81460b02320880b26351dc7a609 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -----------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ------------
 .../patches/fix-x11-library-call.patch        | 39 +++++++++++++++
 srcpkgs/gnuradio/template                     | 49 ++++++++++++++-----
 6 files changed, 97 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index 80c03ec1f754..12ae52ae82c9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3249,22 +3249,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..cb7afd79710c 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,50 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
+if [ "${XBPS_TARGET_MACHINE%-musl}" = "i686" ]; then
+	make_check=ci-skip  # See https://github.com/gnuradio/gnuradio/issues/5973
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +54,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +62,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 62bf9ae1d307842a32d9e9bfcefa1ac54d908943 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 common/shlibs                              |     2 +-
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 3 files changed, 13 insertions(+), 13129 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/common/shlibs b/common/shlibs
index 12ae52ae82c9..cfcb01e49b17 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3604,7 +3604,7 @@ libzhuyin.so.13 libzhuyin-2.6.0_3
 libuhd.so.4.0.0 uhd-4.0.0.0_1
 libeditline.so.1 editline-1.16.0_1
 libgnuradio-rds.so.1 gnuradio-rds-3.8.0_1
-libgnuradio-nrsc5-1.0.0git.so.0.0.0 gnuradio-nrsc5-1.0.0_1
+libgnuradio-nrsc5.so.2.0.0git gnuradio-nrsc5-2.0.0_1
 libgamemode.so.0 libgamemode-1.6.1_1
 libgamemodeauto.so.0 libgamemode-1.6.1_1
 libgaminggear.so.0 libgaminggear-0.15.1_1
diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From e3f844d976d6d998533201f094f637ed976aea7e Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From afbdcb07c42955cf77fe0977181e4fb317249972 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 5b073e4bf6182455959d4d7d9df06b61323a8d35 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (59 preceding siblings ...)
  2022-07-27 11:02 ` [PR PATCH] [Updated] " unspecd
@ 2022-07-27 11:05 ` unspecd
  2022-07-27 13:15 ` unspecd
                   ` (3 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-27 11:05 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.3.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 387199 bytes --]

From e2978fbc54959b733dce4219a9ad3733cbe154ac Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 39 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 38fb7b934ab0..6e57e5eb7691 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4178,3 +4178,4 @@ libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
 libqtspell-qt5.so.1 qtspell-1.0.1_1
 libopensmtpd.so.0 libopensmtpd-0.7_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..9bbe7feb616a
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,36 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_DOC=YES
+ -DWITH_SERIAL_BACKEND=YES -DHAVE_DNS_SD=YES -DPYTHON_BINDINGS=YES"
+hostmakedepends="bison flex doxygen python3 python3-Sphinx python3-sphinx_rtd_theme"
+makedepends="avahi-libs-devel libaio-devel libserialport-devel libusb-devel libxml2-devel"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 9995262ae59ef929b1b5310d3c9bab02a085c49a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..7bdd9b68e541
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 9e24291637278711fe5514d104977f85a77738e1 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 32 +++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..a11c75ad30fa
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,32 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+if [ ${XBPS_TARGET_MACHINE%-musl} = "i686" ]; then
+	make_check=no  # See https://github.com/CastXML/pygccxml/issues/150
+fi
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From c94664739b01ff0ffd521eea39a8223321379240 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -----------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ------------
 .../patches/fix-x11-library-call.patch        | 39 +++++++++++++++
 srcpkgs/gnuradio/template                     | 49 ++++++++++++++-----
 6 files changed, 97 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index 6e57e5eb7691..58553f0dfdd8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3251,22 +3251,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..cb7afd79710c 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,50 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
+if [ "${XBPS_TARGET_MACHINE%-musl}" = "i686" ]; then
+	make_check=ci-skip  # See https://github.com/gnuradio/gnuradio/issues/5973
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +54,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +62,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From abb1f394c191af7eda7a9db72345ef43718a702d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 common/shlibs                              |     2 +-
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 3 files changed, 13 insertions(+), 13129 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/common/shlibs b/common/shlibs
index 58553f0dfdd8..221b8b705452 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3606,7 +3606,7 @@ libzhuyin.so.13 libzhuyin-2.6.0_3
 libuhd.so.4.0.0 uhd-4.0.0.0_1
 libeditline.so.1 editline-1.16.0_1
 libgnuradio-rds.so.1 gnuradio-rds-3.8.0_1
-libgnuradio-nrsc5-1.0.0git.so.0.0.0 gnuradio-nrsc5-1.0.0_1
+libgnuradio-nrsc5.so.2.0.0git gnuradio-nrsc5-2.0.0_1
 libgamemode.so.0 libgamemode-1.6.1_1
 libgamemodeauto.so.0 libgamemode-1.6.1_1
 libgaminggear.so.0 libgaminggear-0.15.1_1
diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 01884cf9a818bb283339986d629f74c8a9241bb8 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From fdf8b277e54fade74fd9c24b0a46885f9e01e64f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From d8df3e7712299b4cdd014b0044deca2977b4639f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (60 preceding siblings ...)
  2022-07-27 11:05 ` unspecd
@ 2022-07-27 13:15 ` unspecd
  2022-07-28  7:17 ` [PR PATCH] [Updated] " classabbyamp
                   ` (2 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-07-27 13:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 147 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1196748509

Comment:
Done.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (61 preceding siblings ...)
  2022-07-27 13:15 ` unspecd
@ 2022-07-28  7:17 ` classabbyamp
  2022-07-28  7:18 ` [PR PATCH] [Merged]: " classabbyamp
  2022-07-28  7:19 ` classabbyamp
  64 siblings, 0 replies; 66+ messages in thread
From: classabbyamp @ 2022-07-28  7:17 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1200 bytes --]

There is an updated pull request by classabbyamp against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.3.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 387246 bytes --]

From e2978fbc54959b733dce4219a9ad3733cbe154ac Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 39 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index 38fb7b934ab0..6e57e5eb7691 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4178,3 +4178,4 @@ libnvidia-container.so.1 libnvidia-container-1.10.0_1
 libnvidia-container-go.so.1 libnvidia-container-1.10.0_1
 libqtspell-qt5.so.1 qtspell-1.0.1_1
 libopensmtpd.so.0 libopensmtpd-0.7_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..9bbe7feb616a
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,36 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_DOC=YES
+ -DWITH_SERIAL_BACKEND=YES -DHAVE_DNS_SD=YES -DPYTHON_BINDINGS=YES"
+hostmakedepends="bison flex doxygen python3 python3-Sphinx python3-sphinx_rtd_theme"
+makedepends="avahi-libs-devel libaio-devel libserialport-devel libusb-devel libxml2-devel"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 7028a78276059073487d075d4ee5af5a281f61bc Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.5

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..364a363852d6
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.5
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="https://github.com/CastXML/CastXML/archive/v${version}.tar.gz"
+checksum=007f6d073165e150df0e40e1ec331f6f94304684af9eed3b0e5dabaebcfb1197
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From 340fb8af7963da75e80ff41ace9f978b29d249b4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 32 +++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..29ca21526eee
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,32 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="https://github.com/CastXML/pygccxml/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+if [ ${XBPS_TARGET_MACHINE%-musl} = "i686" ]; then
+	make_check=no  # See https://github.com/CastXML/pygccxml/issues/150
+fi
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From b0859460f61f24525fe8e058408782a7d4b6d411 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.3.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 ++++++++------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 46 -----------------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 -----------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ------------
 .../patches/fix-x11-library-call.patch        | 39 +++++++++++++++
 srcpkgs/gnuradio/template                     | 49 ++++++++++++++-----
 6 files changed, 97 insertions(+), 134 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
 create mode 100644 srcpkgs/gnuradio/patches/fix-x11-library-call.patch

diff --git a/common/shlibs b/common/shlibs
index 6e57e5eb7691..58553f0dfdd8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3251,22 +3251,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pmt.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-blocks.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-audio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fec.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-fft.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-filter.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-analog.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-digital.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-dtv.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-channels.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-trellis.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-video-sdl.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-vocoder.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-wavelet.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-uhd.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-network.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-soapy.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-qtgui.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-zeromq.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-iio.so.3.10.3 gnuradio-3.10.3.0_1
+libgnuradio-pdu.so.3.10.3 gnuradio-3.10.3.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
deleted file mode 100644
index 51952bd29b38..000000000000
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 596c6495f3bdf579dae0c26531a16f6adcc7fb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
-Date: Mon, 13 Apr 2020 00:11:59 +0200
-Subject: [PATCH] =?UTF-8?q?pmt:=20conditionalize=20testing=20of=20long=20>?=
- =?UTF-8?q?=202=C2=B3=C2=B2=20on=20sizeof(long)?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- gnuradio-runtime/python/pmt/qa_pmt.py | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
-index 884bba7dd4b..44f616cdae1 100644
---- a/gnuradio-runtime/python/pmt/qa_pmt.py
-+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
-@@ -18,6 +18,10 @@ class test_pmt(unittest.TestCase):
-     MAXINT32 = (2**31)-1
-     MININT32 = (-MAXINT32)-1
- 
-+    def setUp(self):
-+        from ctypes import sizeof, c_long
-+        self.sizeof_long = sizeof(c_long)
-+
-     def test01(self):
-         a = pmt.intern("a")
-         b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/patches/fix-x11-library-call.patch b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
new file mode 100644
index 000000000000..589c87e2ee35
--- /dev/null
+++ b/srcpkgs/gnuradio/patches/fix-x11-library-call.patch
@@ -0,0 +1,39 @@
+diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
+index fc5e9276c..41ea88b4c 100755
+--- a/gr-uhd/apps/uhd_fft
++++ b/gr-uhd/apps/uhd_fft
+@@ -32,7 +32,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
+index 0d9cb56c2..ea5e430f3 100755
+--- a/gr-uhd/apps/uhd_siggen_gui
++++ b/gr-uhd/apps/uhd_siggen_gui
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import ctypes
+     if sys.platform.startswith('linux'):
+         try:
+-            X11 = ctypes.cdll.LoadLibrary('libX11.so')
++            X11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             X11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
+diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako
+index b1c369177..6e9c56a08 100644
+--- a/grc/core/generator/flow_graph.py.mako
++++ b/grc/core/generator/flow_graph.py.mako
+@@ -29,7 +29,7 @@ if __name__ == '__main__':
+     import sys
+     if sys.platform.startswith('linux'):
+         try:
+-            x11 = ctypes.cdll.LoadLibrary('libX11.so')
++            x11 = ctypes.cdll.LoadLibrary('libX11.so.6')
+             x11.XInitThreads()
+         except:
+             print("Warning: failed to XInitThreads()")
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..cb7afd79710c 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,50 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.3.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DMATHJAX2_USE_ROOT=/usr/share/mathjax
+ -DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-jsonschema python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen mathjax python3-Sphinx python3-pybind11 python3-pygccxml
+ ${_pydeps}"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 python3-pygccxml qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=957108a67ec75d99adaad8f3b10be8ae08760a9cef0b659a5c815a4e33898a75
 python_version=3
 
+if [ "$CROSS_BUILD" ]; then
+	# CMake fails when cross-compiling.
+	configure_args+=" -DENABLE_TESTING=OFF"
+fi
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
+if [ "${XBPS_TARGET_MACHINE%-musl}" = "i686" ]; then
+	make_check=ci-skip  # See https://github.com/gnuradio/gnuradio/issues/5973
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -32,6 +54,7 @@ post_install() {
 
 gnuradio-doc_package() {
 	short_desc+=" - documentation"
+	depends="mathjax"
 	pkg_install() {
 		vmove usr/share/doc
 	}
@@ -39,7 +62,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 4572cb63f43af1cb3f28362b3a8d9b93f0d9389c Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to 2.0.0.

Also clean up makedepends.
---
 common/shlibs                              |     2 +-
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    19 +-
 3 files changed, 13 insertions(+), 13129 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/common/shlibs b/common/shlibs
index 58553f0dfdd8..221b8b705452 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3606,7 +3606,7 @@ libzhuyin.so.13 libzhuyin-2.6.0_3
 libuhd.so.4.0.0 uhd-4.0.0.0_1
 libeditline.so.1 editline-1.16.0_1
 libgnuradio-rds.so.1 gnuradio-rds-3.8.0_1
-libgnuradio-nrsc5-1.0.0git.so.0.0.0 gnuradio-nrsc5-1.0.0_1
+libgnuradio-nrsc5.so.2.0.0git gnuradio-nrsc5-2.0.0_1
 libgamemode.so.0 libgamemode-1.6.1_1
 libgamemodeauto.so.0 libgamemode-1.6.1_1
 libgaminggear.so.0 libgaminggear-0.15.1_1
diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # along with GNU Radio; see the file COPYING.  If not, write to
- # the Free Software Foundation, Inc., 51 Franklin Street,
- # Boston, MA 02110-1301, USA.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * GNU Radio is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio 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 3, or (at your option)
--# any later version.
--#
--# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio 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 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # GNU Radio is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..9b87518269bd 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,24 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
+version=2.0.0
+revision=1
 wrksrc="gr-nrsc5-${version}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
+homepage="https://github.com/argilo/gr-nrsc5"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+checksum=cc9135b20e79111f609b95e02c5b5926c8c71c3ed8ab6e58b2b484d4efb333ae
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From bfb140322e586c0808127ef0d8f97571dfe0b2fc Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..cdb4d27faf68 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git20210128
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 1ce1de1793843eddec1799e99ad7a6630b47cc15 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 59a7ccf988d0c31bab151db35a1f0b7a920f3f68 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.9.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..280ffced8bb8 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,29 +1,27 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.9
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
+depends="desktop-file-utils"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=4a826b468b2fb38a59cbe1f1b566e62c3114509186a7a25ba27dc92833f3eb44
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio
 desc_option_gr_audio="Enable support for GNU Radio audio (ALSA and JACK)"
 
 post_install() {
-	vinstall gqrx.desktop 644 usr/share/applications
+	vinstall dk.gqrx.gqrx.desktop 644 usr/share/applications
 	vinstall resources/icons/gqrx.svg 644 usr/share/pixmaps
 }

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Merged]: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (62 preceding siblings ...)
  2022-07-28  7:17 ` [PR PATCH] [Updated] " classabbyamp
@ 2022-07-28  7:18 ` classabbyamp
  2022-07-28  7:19 ` classabbyamp
  64 siblings, 0 replies; 66+ messages in thread
From: classabbyamp @ 2022-07-28  7:18 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1034 bytes --]

There's a merged pull request on the void-packages repository

gnuradio: update to 3.10.3.0.
https://github.com/void-linux/void-packages/pull/35049

Description:
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.3.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (63 preceding siblings ...)
  2022-07-28  7:18 ` [PR PATCH] [Merged]: " classabbyamp
@ 2022-07-28  7:19 ` classabbyamp
  64 siblings, 0 replies; 66+ messages in thread
From: classabbyamp @ 2022-07-28  7:19 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 185 bytes --]

New comment by classabbyamp on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1197761059

Comment:
(my push fixed $homepage in distfiles)

^ permalink raw reply	[flat|nested] 66+ messages in thread

end of thread, other threads:[~2022-07-28  7:19 UTC | newest]

Thread overview: 66+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
2022-01-14 20:34 ` unspecd
2022-01-14 20:36 ` unspecd
2022-01-15  5:04 ` [PR PATCH] [Updated] " unspecd
2022-01-15  6:34 ` [PR PATCH] [Updated] gnuradio: update to 3.10.0.0 unspecd
2022-01-15  6:38 ` unspecd
2022-01-15  6:45 ` unspecd
2022-01-15  6:55 ` [PR PATCH] [Updated] " unspecd
2022-01-15 20:12 ` unspecd
2022-01-15 22:08 ` unspecd
2022-01-17  9:03 ` [PR REVIEW] " ericonr
2022-01-17  9:03 ` ericonr
2022-01-17  9:03 ` ericonr
2022-01-17 11:10 ` unspecd
2022-01-17 11:10 ` unspecd
2022-01-17 13:10 ` unspecd
2022-01-18 10:35 ` [PR PATCH] [Updated] " unspecd
2022-01-18 10:35 ` unspecd
2022-01-18 10:40 ` unspecd
2022-01-18 11:04 ` [PR PATCH] [Updated] " unspecd
2022-01-18 11:06 ` unspecd
2022-01-21  7:33 ` [PR PATCH] [Updated] " unspecd
2022-01-22  5:54 ` unspecd
2022-01-29  4:25 ` unspecd
2022-01-29  9:37 ` unspecd
2022-01-29  9:39 ` unspecd
2022-01-29 10:50 ` unspecd
2022-02-01  8:38 ` [PR PATCH] [Updated] " unspecd
2022-02-02  9:11 ` unspecd
2022-02-02 10:21 ` gnuradio: update to 3.10.1.0 unspecd
2022-02-02 10:27 ` [PR PATCH] [Updated] " unspecd
2022-02-02 11:10 ` unspecd
2022-02-02 11:12 ` unspecd
2022-02-04 11:24 ` [PR PATCH] [Updated] gnuradio: update to 3.10.1.1 unspecd
2022-02-20  8:34 ` unspecd
2022-03-31  8:09 ` unspecd
2022-03-31  8:10 ` unspecd
2022-04-11 16:29 ` [PR PATCH] [Updated] " unspecd
2022-04-14  7:59 ` unspecd
2022-04-14 12:52 ` unspecd
2022-04-18  1:00 ` [PR PATCH] [Updated] " unspecd
2022-06-21 22:24 ` [PR PATCH] [Updated] gnuradio: update to 3.10.2.0 unspecd
2022-06-21 22:27 ` gnuradio: update to 3.10.3.0 unspecd
2022-06-22 18:37 ` classabbyamp
2022-06-27  3:37 ` unspecd
2022-06-28  3:23 ` classabbyamp
2022-06-28  5:23 ` [PR PATCH] [Updated] " unspecd
2022-06-28 14:53 ` unspecd
2022-06-28 15:36 ` unspecd
2022-06-28 15:36 ` unspecd
2022-07-17 16:27 ` Noah-Huppert
2022-07-17 18:56 ` ericonr
2022-07-17 18:57 ` ericonr
2022-07-17 21:59 ` [PR PATCH] [Updated] " unspecd
2022-07-17 22:44 ` unspecd
2022-07-19 15:47 ` [PR REVIEW] " sgn
2022-07-19 17:06 ` [PR PATCH] [Updated] " unspecd
2022-07-19 17:10 ` [PR REVIEW] " unspecd
2022-07-19 17:10 ` unspecd
2022-07-27  6:30 ` sgn
2022-07-27 11:02 ` [PR PATCH] [Updated] " unspecd
2022-07-27 11:05 ` unspecd
2022-07-27 13:15 ` unspecd
2022-07-28  7:17 ` [PR PATCH] [Updated] " classabbyamp
2022-07-28  7:18 ` [PR PATCH] [Merged]: " classabbyamp
2022-07-28  7:19 ` classabbyamp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).