diff --git a/buildbot/master/commands/coveralls.py b/buildbot/master/commands/coveralls.py
new file mode 100644
index 0000000..c17f289
--- /dev/null
+++ b/buildbot/master/commands/coveralls.py
@@ -0,0 +1,11 @@
+import re
+from buildbot.steps.shell import ShellCommand
+
+class CoverallsCommand(ShellCommand):
+    command = ["coveralls", "-E", "'/usr/.*'", "-E", "'./CMakeFiles/.*'", "-e", "deps", "-e", "tests"]
+
+    def createSummary(self, log):
+        match = re.search(r"https://coveralls.io/jobs/([0-9]+)", log.getText(), re.MULTILINE)
+        if match:
+            self.addURL("coverage", match.group())
+
diff --git a/buildbot/master/master.cfg b/buildbot/master/master.cfg
new file mode 100644
index 0000000..98fce47
--- /dev/null
+++ b/buildbot/master/master.cfg
@@ -0,0 +1,668 @@
+# -*- python -*-
+# ex: set syntax=python:
+
+import json
+from buildbot.changes.filter import ChangeFilter
+from buildbot.plugins import *
+
+c = BuildmasterConfig = {}
+
+# BUILDSLAVES
+
+secrets = json.load(open('secrets.json'))
+
+c['slaves'] = [
+    buildslave.BuildSlave('linux-amd64', secrets['linux-amd64'],
+                          max_builds=1,
+                          properties={'platform': 'linux-amd64'}),
+    buildslave.BuildSlave('linux-i386', secrets['linux-i386'],
+                          max_builds=1,
+                          properties={'platform': 'linux-i686'}),
+    buildslave.BuildSlave('freebsd64', secrets['freebsd64'],
+                          max_builds=1,
+                          properties={'platform': 'freebsd-amd64'}),
+    buildslave.BuildSlave('arm7', secrets['arm7'],
+                          max_builds=1,
+                          properties={'platform': 'linux-armv7'}),
+    buildslave.BuildSlave('arm8', secrets['arm8'],
+                          max_builds=1,
+                          properties={'platform': 'linux-armv8'}),
+    buildslave.BuildSlave('win32', secrets['win32'],
+                          max_builds=1,
+                          properties={'platform': 'win32'}),
+    buildslave.BuildSlave('win64', secrets['win64'],
+                          max_builds=1,
+                          properties={'platform': 'win64'}),
+    buildslave.BuildSlave('osx-10.10', secrets['osx-10.10'],
+                          max_builds=1,
+                          properties={'platform': 'osx-10.10'}),
+    buildslave.BuildSlave('osx-10.11', secrets['osx-10.11'],
+                          max_builds=1,
+                          properties={'platform': 'osx-10.11'}),
+    buildslave.BuildSlave('osx-10.12', secrets['osx-10.12'],
+                          max_builds=1,
+                          properties={'platform': 'osx-10.12'}),
+]
+
+c['protocols'] = {'pb': {'port': 9989}}
+
+# CHANGESOURCES
+
+c['change_source'] = []
+c['change_source'].append(changes.GitPoller(
+        'https://github.com/monero-project/monero.git',
+        workdir='gitpoller-workdir', branch='master',
+        pollinterval=400))
+
+c['change_source'].append(changes.GitPoller(
+        'https://github.com/monero-project/monero-core.git',
+        workdir='gitpoller-workdir', branch='master',
+        pollinterval=600))
+
+c['change_source'].append(changes.GitPoller(
+        'https://github.com/monero-project/kovri.git',
+        workdir='gitpoller-workdir', branch='master',
+        pollinterval=400))
+
+####### SCHEDULERS
+
+# Configure the Schedulers, which decide how to react to incoming changes.
+
+c['schedulers'] = []
+from buildbot.plugins import schedulers
+
+c['schedulers'].append(schedulers.ForceScheduler(
+                            name='force',
+                            builderNames=['monero-tests-ubuntu-16.04-i686','monero-tests-windows-10-i686','monero-tests-freebsd-10.3-amd64','monero-tests-ubuntu-16.04-amd64','monero-tests-osx-10.11','monero-tests-osx-10.10','monero-tests-osx-10.12','monero-tests-ubuntu-16.04-armv7','monero-tests-debian-armv8','monero-tests-windows-10-amd64','monero-core-win32','monero-core-win64','monero-core-freebsd','monero-core-ubuntu-arm7','monero-core-debian-armv8','kovri-all-freebsd64','kovri-all-osx-10.12','kovri-all-osx-10.10','kovri-all-osx-10.11','kovri-all-ubuntu-arm7','kovri-all-ubuntu-i686','kovri-all-win32','kovri-all-win64','kovri-all-debian-arm8','kovri-all-ubuntu-amd64','monero-core-osx-10.12','monero-core-osx-10.11','monero-core-ubuntu-amd64','monero-core-ubuntu-i686','monero-static-osx-10.10','monero-static-osx-10.11','monero-static-win32','monero-static-win64','monero-static-ubuntu-amd64','monero-static-freebsd64','monero-static-ubuntu-arm7','monero-static-debian-armv8','monero-static-ubuntu-i686','monero-static-osx-10.12']))
+
+c['schedulers'].append(schedulers.SingleBranchScheduler(
+            name='monero PR builder',
+            builderNames=['monero-static-win32','monero-static-win64','monero-static-osx-10.10','monero-static-osx-10.11','monero-static-osx-10.12','monero-static-freebsd64','monero-static-debian-armv8','monero-static-ubuntu-arm7','monero-static-ubuntu-amd64','monero-static-ubuntu-i686'],
+            change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero.git')
+            ))
+
+c['schedulers'].append(schedulers.SingleBranchScheduler(
+            name='monero-core PR builder',
+            builderNames=['monero-core-osx-10.12','monero-core-osx-10.11','monero-core-ubuntu-i686','monero-core-ubuntu-amd64','monero-core-win32','monero-core-win64','monero-core-ubuntu-arm7'],
+            change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero-core.git')
+            ))
+
+c['schedulers'].append(schedulers.SingleBranchScheduler(
+            name='kovri PR builder',
+            builderNames=['kovri-all-win32','kovri-all-win64','kovri-all-freebsd64','kovri-all-osx-10.12','kovri-all-osx-10.10','kovri-all-osx-10.11','kovri-all-ubuntu-amd64','kovri-all-ubuntu-i686','kovri-all-ubuntu-arm7','kovri-all-debian-arm8'],
+            change_filter=util.ChangeFilter(repository='https://github.com/monero-project/kovri.git')
+            ))
+
+c['schedulers'].append(schedulers.Nightly(
+		       name='Tests',
+                       branch='master',
+		       builderNames=['monero-tests-ubuntu-16.04-i686','monero-tests-windows-10-amd64','monero-tests-ubuntu-16.04-armv7','monero-tests-windows-10-i686','monero-tests-freebsd-10.3-amd64','monero-tests-ubuntu-16.04-amd64','monero-tests-osx-10.11','monero-tests-osx-10.10','monero-tests-osx-10.12'],
+                       hour=5, 
+		       minute=0,
+                       change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero.git'),
+		       onlyIfChanged=True))
+
+# thanks m-labs https://github.com/m-labs/buildbot-config/blob/master/master.cfg
+def addCoverallsUploadSteps(factory, repo_token):
+    factory.addStep(
+        CoverallsCommand(
+            name              = 'coveralls',
+            description       = 'uploading',
+            descriptionDone   = 'upload',
+            descriptionSuffix = 'coveralls',
+            flunkOnFailure    = False,
+            warnOnFailure     = True,
+            env               = { 'COVERALLS_REPO_TOKEN': repo_token },
+            # Don't dump env variables potentially containing secret tokens
+	    logEnviron	      = False
+			))
+
+import re
+from commands import CoverallsCommand
+from buildbot.steps.shell import ShellCommand
+from buildbot.process.properties import WithProperties
+from buildbot.status.results import FAILURE, SUCCESS
+
+# BUILD FACTORIES
+
+noTestsFactory = util.BuildFactory()
+noTestsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+noTestsFactory.addStep(steps.Compile(command = ['make', 'release-static']))
+
+noCoretestsFactory = util.BuildFactory()
+noCoretestsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+noCoretestsFactory.addStep(steps.Compile(command = ['make', 'release-static']))
+noCoretestsFactory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, env={'ARGS': " -E 'coretests|libwallet_api_tests' "}, logfiles={'LastTest': 'build/release/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/release/Testing/Temporary/CTestCostData.txt'}))
+noCoretestsFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+noCoretestsFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
+noCoretestsFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))
+
+ispHijackedFactory = util.BuildFactory()
+ispHijackedFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+ispHijackedFactory.addStep(steps.Compile(command = ['make', 'release-static']))
+ispHijackedFactory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, env={'ARGS': " -E 'coretests|libwallet_api_tests' ", 'GTEST_FILTER': '-DNSResolver.IPv4Failure'}, logfiles={'LastTest': 'build/release/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/release/Testing/Temporary/CTestCostData.txt'}))
+ispHijackedFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+ispHijackedFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
+ispHijackedFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))
+
+osxTestsFactory = util.BuildFactory()
+osxTestsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='incremental'))
+osxTestsFactory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, logfiles={'LastTest.log': 'build/debug/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/debug/Testing/Temporary/CTestCostData.txt','coretests.log': 'build/debug/tests/core_tests/coretests.log'}))
+
+armv8Factory = util.BuildFactory()
+armv8Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+armv8Factory.addStep(steps.Compile(command = ['make', 'release-static-armv8']))
+armv8Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+armv8Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
+armv8Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))
+
+armv7Factory = util.BuildFactory()
+armv7Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='incremental'))
+armv7Factory.addStep(steps.Compile(command = ['ccache', 'make', 'release-static-armv7'], timeout=None))
+armv7Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+armv7Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
+armv7Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))
+
+static32Factory = util.BuildFactory()
+static32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+static32Factory.addStep(steps.Compile(command = ['make', 'release-static-32']))
+static32Factory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, env={'ARGS': " -E 'coretests|libwallet_api_tests' "}, logfiles={"LastTest": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
+static32Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+static32Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
+static32Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))
+
+win32ReleaseFactory = util.BuildFactory()
+win32ReleaseFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+win32ReleaseFactory.addStep(steps.Compile(command = ["make", "release-static-win32"]))
+win32ReleaseFactory.addStep(steps.Test(command = ["make", "release-test"], env={'ARGS': " -E 'coretests|libwallet_api_tests' "}, logfiles={"LastTest": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
+
+win64ReleaseFactory = util.BuildFactory()
+win64ReleaseFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full'))
+win64ReleaseFactory.addStep(steps.Compile(command = ["make", "release-static-win64"]))
+win64ReleaseFactory.addStep(steps.Test(command = ["make", "release-test"], env={'ARGS': " -E 'coretests|libwallet_api_tests' "}, logfiles={"LastTest": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
+win64ReleaseFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+win64ReleaseFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
+win64ReleaseFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))
+
+coreFactory = util.BuildFactory()
+coreFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='full'))
+coreFactory.addStep(steps.Compile(command = ["bash", "-ex", "build.sh"]))
+
+coreOsxFactory = util.BuildFactory()
+coreOsxFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='full'))
+coreOsxFactory.addStep(steps.Compile(command = ["bash", "-ex", "./build.sh"]))
+
+coreFreebsdFactory = util.BuildFactory()
+coreFreebsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='incremental'))
+coreFreebsdFactory.addStep(steps.Compile(command = ["bash", "-ex", "build.sh"],env={'SHELL': '/usr/local/bin/bash', 'PATH': '/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/vagrant/bin:/usr/local/lib/qt5/bin'}))
+
+coreMingw32Factory = util.BuildFactory()
+coreMingw32Factory.addStep(steps.RemoveDirectory(dir='monero'))
+coreMingw32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='full', method='clobber'))
+coreMingw32Factory.addStep(steps.Compile(command = ['/msys32/usr/bin/bash.exe', '-ex', './build.sh'],env={'MSYSTEM': 'MINGW32', 'PATH': '/c/Windows/system32;/c/Windows;/c/Windows/System32/WindowsPowerShell/v1.0;/c/Qt/Qt5.7.0/Tools/mingw530_32/bin;/c/Qt/Qt5.7.0/Tools/mingw530_32/boost/lib;/c/Qt/Qt5.7.0/5.7/mingw53_32/bin;/c/python27/lib/site-packages/pywin32_system32;/c/msys32/mingw32/bin;/c/msys32/usr/bin'}))
+coreMingw32Factory.addStep(steps.Compile(name='deploy', description='deploying', descriptionDone='deploy', command = ['make', 'deploy'], workdir='build/build', env={'MSYSTEM': 'MINGW32', 'PATH': '/c/Python27;/c/Python27/Scripts;/c/Windows/system32;/c/Windows;/c/Qt/Qt5.7.0/Tools/mingw530_32/bin;/c/Qt/Qt5.7.0/Tools/mingw530_32/boost/lib;/c/Qt/Qt5.7.0/5.7/mingw53_32/bin;/c/python27/lib/site-packages/pywin32_system32;/c/msys32/mingw32/bin;/msys32/usr/bin'}))
+coreMingw32Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+coreMingw32Factory.addStep(steps.ShellCommand(name = "zip", command = ["zip", "-r", WithProperties("monero-core-%(gitversion)s-%(platform)s.zip"), "build/release/bin"] ))
+coreMingw32Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-core-%(gitversion)s-%(platform)s.zip"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-core-%(gitversion)s-%(platform)s.zip"), url=WithProperties("https://build.getmonero.org/downloads/monero-core-%(gitversion)s-%(platform)s.zip")))
+
+coreMingw64Factory = util.BuildFactory()
+coreMingw64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='full', method="clobber"))
+coreMingw64Factory.addStep(steps.Compile(command = ["/msys64/usr/bin/bash.exe","-ex","./build.sh"],env={'MSYSTEM': "MINGW64"}))
+
+kovriAllFactory = util.BuildFactory()
+kovriAllFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
+kovriAllFactory.addStep(steps.Compile(command=["make", "all-options"]))
+kovriAllFactory.addStep(steps.Compile(name="compile tests", command=["make", "tests"]))
+
+kovriArmFactory = util.BuildFactory()
+kovriArmFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
+kovriArmFactory.addStep(steps.Compile(command=["make", "all-options"], env={'CC': 'clang35', 'CXX': 'clang++35'}))
+kovriArmFactory.addStep(steps.Compile(name="compile tests", command=["make", "tests"], env={'CC': 'clang35', 'CXX': 'clang++35'}))
+
+kovriUbuntu64Factory = util.BuildFactory()
+kovriUbuntu64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
+kovriUbuntu64Factory.addStep(steps.Compile(command=["make", "coverage"]))
+kovriUbuntu64Factory.addStep(steps.Compile(name="compile tests", command=["make", "coverage-tests"]))
+kovriUbuntu64Factory.addStep(steps.Test(command=["./build/kovri-tests"]))
+addCoverallsUploadSteps(kovriUbuntu64Factory,repo_token=secrets['coveralls_token'])
+
+kovriFreebsdFactory = util.BuildFactory()
+kovriFreebsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
+kovriFreebsdFactory.addStep(steps.Compile(command=["gmake", "all-options"], env={'CC': 'clang36', 'CXX': 'clang++36'}))
+kovriFreebsdFactory.addStep(steps.Compile(name="compile tests", command=["gmake", "tests"], env={'CC': 'clang36', 'CXX': 'clang++36'}))
+kovriFreebsdFactory.addStep(steps.Test(command=["./build/kovri-tests"]))
+
+kovriMingw32Factory = util.BuildFactory()
+kovriMingw32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
+kovriMingw32Factory.addStep(steps.Compile(command=["/msys32/usr/bin/bash.exe","-c", "make", "all-options"],env={'MSYSTEM': "MINGW32"}))
+kovriMingw32Factory.addStep(steps.Compile(name="compile tests", command=["make", "tests"]))
+kovriMingw32Factory.addStep(steps.Test(command=["kovri-tests.exe"], workdir="build/build"))
+
+kovriMingw64Factory = util.BuildFactory()
+kovriMingw64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
+kovriMingw64Factory.addStep(steps.Compile(command=["make", "all-options"],env={'MSYSTEM': "MINGW64"}))
+kovriMingw64Factory.addStep(steps.Compile(name="compile tests", command=["make", "tests"]))
+kovriMingw64Factory.addStep(steps.Test(command=["kovri-tests.exe"], workdir="build/build"))
+
+coreUbuntu64Factory = util.BuildFactory()
+coreUbuntu64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='full'))
+coreUbuntu64Factory.addStep(steps.Compile(command = ["bash", "-ex", "./build.sh"]))
+coreUbuntu64Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
+coreUbuntu64Factory.addStep(steps.FileUpload(slavesrc="build/release/bin/monero-core", masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-core-%(gitversion)s-%(platform)s"), url=WithProperties("https://build.getmonero.org/downloads/monero-core-%(gitversion)s-%(platform)s")))
+
+coreDebianFactory = util.BuildFactory()
+coreDebianFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-core.git', mode='full'))
+coreDebianFactory.addStep(steps.Compile(command = ["bash", "-ex", "./build.sh"]))
+
+testsFactory = util.BuildFactory()
+testsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='incremental'))
+testsFactory.addStep(steps.Compile(command = ["make", "debug"]))
+testsFactory.addStep(steps.Test(command = ["make", "debug-test"], timeout=None, logfiles={"LastTest.log": "build/debug/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/debug/Testing/Temporary/CTestCostData.txt","coretests.log": "build/debug/tests/core_tests/coretests.log"}))
+
+testsFreebsdFactory = util.BuildFactory()
+testsFreebsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', method="clobber"))
+testsFreebsdFactory.addStep(steps.Compile(command = ["make", "release-static"]))
+testsFreebsdFactory.addStep(steps.Test(command = ["make", "release-test"], timeout=None, logfiles={"LastTest.log": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt","coretests.log": "build/release/tests/core_tests/coretests.log"}))
+
+testsWin32Factory = util.BuildFactory()
+testsWin32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', method="clobber"))
+testsWin32Factory.addStep(steps.Compile(command = ["make", "release-static-win32"]))
+testsWin32Factory.addStep(steps.Test(command = ["make", "release-test"], timeout=None, logfiles={"LastTest.log": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
+
+testsWin64Factory = util.BuildFactory()
+testsWin64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', method="clobber"))
+testsWin64Factory.addStep(steps.Compile(command = ["make", "release-static-win64"]))
+testsWin64Factory.addStep(steps.Test(command = ["make", "release-test"], timeout=None, logfiles={"LastTest.log": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
+
+# BUILDERS
+c['builders'] = []
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-windows-10-i686",
+      slavenames=["win32"],
+      factory=testsWin32Factory)) 
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-osx-10.12",
+      slavenames=["osx-10.12"],
+      factory=osxTestsFactory)) 
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-osx-10.10",
+      slavenames=["osx-10.10"],
+      factory=testsFactory)) 
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-osx-10.11",
+      slavenames=["osx-10.11"],
+      factory=testsFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-debian-armv8",
+      slavenames=["arm8"],
+      factory=armv8Factory,
+      mergeRequests=True,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-ubuntu-amd64",
+      slavenames=["linux-amd64"],
+      factory=noCoretestsFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-ubuntu-i686",
+      slavenames=["linux-i386"],
+      factory=static32Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-ubuntu-arm7",
+      slavenames=["arm7"],
+      factory=armv7Factory,
+      mergeRequests=True,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-freebsd64",
+      slavenames=["freebsd64"],
+      factory=noCoretestsFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-osx-10.12",
+      slavenames=["osx-10.12"],
+      factory=noCoretestsFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-osx-10.10",
+      slavenames=["osx-10.10"],
+      factory=noCoretestsFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-osx-10.11",
+      slavenames=["osx-10.11"],
+      factory=ispHijackedFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-win32",
+      slavenames=["win32"],
+      factory=win32ReleaseFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-static-win64",
+      slavenames=["win64"],
+      factory=win64ReleaseFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-win32",
+      slavenames=["win32"],
+      factory=coreMingw32Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-win64",
+      slavenames=["win64"],
+      factory=coreMingw64Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-freebsd",
+      slavenames=["freebsd64"],
+      factory=coreFreebsdFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-ubuntu-arm7",
+      slavenames=["arm7"],
+      factory=coreFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-debian-armv8",
+      slavenames=["arm8"],
+      factory=coreFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-ubuntu-amd64",
+      slavenames=["linux-amd64"],
+      factory=coreUbuntu64Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-ubuntu-i686",
+      slavenames=["linux-i386"],
+      factory=coreDebianFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-osx-10.12",
+      slavenames=["osx-10.12"],
+      factory=coreOsxFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-core-osx-10.11",
+      slavenames=["osx-10.11"],
+      factory=coreOsxFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "monero-core",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-ubuntu-i686",
+      slavenames=["linux-i386"],
+      factory=kovriAllFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-osx-10.12",
+      slavenames=["osx-10.12"],
+      factory=kovriAllFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-osx-10.10",
+      slavenames=["osx-10.10"],
+      factory=kovriAllFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-osx-10.11",
+      slavenames=["osx-10.11"],
+      factory=kovriAllFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-ubuntu-amd64",
+      slavenames=["linux-amd64"],
+      factory=kovriUbuntu64Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-ubuntu-arm7",
+      slavenames=["arm7"],
+      factory=kovriAllFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-debian-arm8",
+      slavenames=["arm8"],
+      factory=kovriAllFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-freebsd64",
+      slavenames=["freebsd64"],
+      factory=kovriFreebsdFactory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-win32",
+      slavenames=["win32"],
+      factory=kovriMingw32Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="kovri-all-win64",
+      slavenames=["win64"],
+      factory=kovriMingw64Factory,
+      properties={
+        "github_repo_owner": "monero-project",
+        "github_repo_name": "kovri",
+    }))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-ubuntu-16.04-i686",
+      slavenames=["linux-i386"],
+      factory=testsFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-ubuntu-16.04-amd64",
+      slavenames=["linux-amd64"],
+      factory=testsFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-windows-10-amd64",
+      slavenames=["win64"],
+      factory=testsWin64Factory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-freebsd-10.3-amd64",
+      slavenames=["freebsd64"],
+      factory=testsFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-ubuntu-16.04-armv7",
+      slavenames=["arm7"],
+      factory=testsFactory))
+
+c['builders'].append(
+    util.BuilderConfig(name="monero-tests-debian-armv8",
+      slavenames=["arm8"],
+      factory=testsFactory))
+
+
+# STATUS TARGETS
+
+# 'status' is a list of Status Targets. The results of each build will be
+# pushed to these targets. buildbot/status/*.py has a variety to choose from,
+# including web pages, email senders, and IRC bots.
+
+c['status'] = []
+
+from buildbot.status import html
+from buildbot.status.web import authz, auth
+secrets = json.load(open('secrets.json'))
+
+authz_cfg=authz.Authz(
+    gracefulShutdown = 'auth',
+    forceBuild = 'auth', 
+    forceAllBuilds = 'auth',  
+    pingBuilder = 'auth',
+    stopBuild = 'auth',
+    stopAllBuilds = 'auth',
+    cancelPendingBuild = 'auth',
+    pauseSlave = 'auth',
+    cancelAllPendingBuilds = 'auth',
+)
+c['status'].append(html.WebStatus(http_port=8010,authz=authz_cfg, 
+                                   change_hook_dialects={
+				       'github':{
+        				    'secret': secrets['gh_change_hook'],
+            			            'strict': True
+        					} 
+					
+					}))
+
+from buildbot.plugins import status
+
+irc = status.IRC('irc.freenode.org', 'xmr_buildbot',
+                 useColors=True,
+                 channels=[{"channel": "#monero-bots"}
+],
+		 allowForce=True,
+                 notify_events={
+                   'started': 0,
+		   'finished': 0,
+		   'failure': 1,
+                   'success': 1,
+	           'exception': 1,
+                   'successToFailure': 1,
+                   'failureToSuccess': 1
+                 })
+
+c['status'].append(irc)
+
+# Github status reporter
+from buildbot.plugins import status, util
+
+repoOwner = util.Interpolate("%(prop:github_repo_owner)s")
+repoName = util.Interpolate("%(prop:github_repo_name)s")
+sha = util.Interpolate("%(src::revision)s")
+context = util.Interpolate("buildbot/%(prop:buildername)s")
+gs = status.GitHubStatus(token=secrets['github_token'],
+                         repoOwner=repoOwner,
+                         repoName=repoName,
+                         sha=sha,
+                         context=context,
+                         startDescription='Build started.',
+                         endDescription='Build done.')
+c['status'].append(gs)
+
+# PROJECT IDENTITY
+
+# the 'title' string will appear at the top of this buildbot
+# installation's html.WebStatus home page (linked to the
+# 'titleURL') and is embedded in the title of the waterfall HTML page.
+
+c['title'] = 'Monero Project'
+c['titleURL'] = 'https://getmonero.org/'
+
+c['buildbotURL'] = 'https://build.getmonero.org/'
+
+# DB URL
+
+c['db'] = {
+    'db_url':'sqlite:///state.sqlite',
+}