diff --git a/.gitignore b/.gitignore
index 2b75303a..61bad162 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,6 @@
/build
/captures
.externalNativeBuild
+java_pid10832.hprof
+java_pid17480.hprof
+java_pid21508.hprof
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000..e1b5f0d1
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,45 @@
+image: openjdk:8-jdk
+
+variables:
+ ANDROID_COMPILE_SDK: "28"
+ ANDROID_BUILD_TOOLS: "28.0.2"
+ ANDROID_SDK_TOOLS: "4333796"
+
+before_script:
+ - apt-get --quiet update --yes
+ - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
+ - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
+ - unzip -d android-sdk-linux android-sdk.zip
+ - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
+ - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
+ - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
+ - export ANDROID_HOME=$PWD/android-sdk-linux
+ - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
+ - chmod +x ./gradlew
+ # temporarily disable checking for EPIPE error and use yes to accept all licenses
+ - set +o pipefail
+ - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
+ - set -o pipefail
+
+stages:
+ - build
+# - test
+
+#lintDebug:
+# stage: build
+# script:
+# - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
+
+assembleDebug:
+ stage: build
+ script:
+ - ./gradlew assembleDebug
+ artifacts:
+ paths:
+ - app/build/outputs/
+
+#debugTests:
+# stage: test
+# script:
+# - ./gradlew -Pci --console=plain :app:testReleaseflavorDebugUnitTest
+
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..691efaad
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,12 @@
+[submodule "external/jtorctl"]
+ path = external/jtorctl
+ url = https://github.com/guardianproject/jtorctl
+ ignore = dirty
+[submodule "external/badvpn"]
+ path = external/badvpn
+ url = https://github.com/guardianproject/badvpn.git
+ ignore = dirty
+[submodule "external/jsocks"]
+ path = external/jsocks
+ url = https://github.com/guardianproject/jsocks.git
+ ignore = dirty
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 9fc3d833..2ea59622 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -17,15 +17,14 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
deleted file mode 100644
index 79ee123c..00000000
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 15a15b21..00000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 5ab02f20..44fb0827 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -7,6 +7,7 @@
+